WebApplication.CreateBuilder() different overloaded methods in ASP.NET Core

ASP.NET Core में WebApplication.CreateBuilder() के विभिन्न ओवरलोडेड Methods

.NET 6 और उसके बाद के संस्करणों में, WebApplication.CreateBuilder() एक महत्वपूर्ण स्टैटिक मेथड है जो WebApplicationBuilder का एक इंस्टेंस बनाने के लिए उपयोग किया जाता है। इसका प्राथमिक उद्देश्य ASP.NET Core एप्लीकेशन के लिए एक डिफ़ॉल्ट होस्ट कॉन्फ़िगर करना है, जिसमें Kestrel सर्वर, कॉन्फ़िगरेशन सिस्टम, लॉगिंग और डिपेंडेंसी इंजेक्शन शामिल हैं।

WebApplication.CreateBuilder() मेथड्स के कई सारे ओवरलोडेड वर्जन्स हैं जो एप्लीकेशन बिल्ड करने में लचीलापन प्रदान करते हैं आइए इसे समझते हैं

मुख्य WebApplication.CreateBuilder() ओवरलोड

1. WebApplication.CreateBuilder(string[] args)

यह सबसे आम और लगभग सार्वभौमिक रूप से उपयोग किया जाने वाला ओवरलोड है।

  • पैरामीटर: args (एक string[] जो कमांड-लाइन आर्ग्यूमेंट्स का प्रतिनिधित्व करता है).
  • कार्यक्षमता: यह एक WebApplicationBuilder इंस्टेंस बनाता है और कमांड-लाइन आर्ग्यूमेंट्स को एप्लीकेशन के कॉन्फ़िगरेशन सोर्स में शामिल करता है. यह डिफ़ॉल्ट रूप से एक होस्ट को कॉन्फ़िगर करता है जिसमें:
  • Kestrel वेब सर्वर
  • json, appsettings.{Environment}.json फ़ाइलें
  • एनवायरनमेंट वेरिएबल्स
  • और दिए गए कमांड-लाइन आर्ग्यूमेंट्स को कॉन्फ़िगरेशन प्रोवाइडर्स के रूप में शामिल करता है.
  • कंसोल लॉगिंग सक्षम करता है.
  • एक डिफ़ॉल्ट सर्विस कलेक्शन (IServiceCollection) बनाता है.
    • उपयोग का उदाहरण:

var builder = WebApplication.CreateBuilder(args); // args आमतौर पर Main(string[] args) से आता है

2. WebApplication.CreateBuilder() ओवरलोड

यह मुख्य रूप से टेस्टिंग/विशिष्ट परिदृश्यों के लिए हैं

3. WebApplication.CreateBuilder(WebApplicationOptions options)

यह ओवरलोड आपको WebApplicationBuilder के निर्माण के दौरान कुछ अधिक नियंत्रण प्रदान करता है, खासकर जब आप डिफ़ॉल्ट कॉन्फ़िगरेशन व्यवहार को संशोधित करना चाहते हैं या परीक्षण परिदृश्यों के लिए.

  • पैरामीटर: options (एक WebApplicationOptions ऑब्जेक्ट).
  • WebApplicationOptions क्लास: यह क्लास आपको कुछ गुणों को सेट करने की अनुमति देती है जो WebApplicationBuilder के निर्माण को प्रभावित करते हैं:
  • Args: कमांड-लाइन आर्ग्यूमेंट्स प्रदान करता है. यदि आप प्रोग्रामेटिक रूप से आर्ग्यूमेंट्स देना चाहते हैं तो यह उपयोगी है.
  • ApplicationName: एप्लीकेशन का नाम सेट करता है (जो आमतौर पर एंट्री असेंबली नाम से प्राप्त होता है).
  • EnvironmentName: एप्लीकेशन का एनवायरनमेंट सेट करता है (जैसे "Development", "Production").
  • ContentRootPath: एप्लीकेशन का कंटेंट रूट पाथ सेट करता है.
  • WebRootPath: वेब रूट पाथ सेट करता है (जहां स्टैटिक फाइलें स्थित होती हैं).
  • Configuration: यह सबसे महत्वपूर्ण है, क्योंकि आप एक मौजूदा IConfiguration इंस्टेंस प्रदान कर सकते हैं जिसे WebApplicationBuilder उपयोग करेगा. यह तब उपयोगी है जब आप चाहते हैं कि आपका एप्लीकेशन एक कस्टम कॉन्फ़िगरेशन सेट के साथ शुरू हो, जैसे यूनिट टेस्टिंग में या जब आप कॉन्फ़िगरेशन को बाहरी रूप से पूरी तरह से नियंत्रित करना चाहते हैं.
    • कार्यक्षमता: यह options ऑब्जेक्ट में प्रदान की गई सेटिंग्स के अनुसार WebApplicationBuilder का एक इंस्टेंस बनाता है, जिससे आप डिफ़ॉल्ट कॉन्फ़िगरेशन स्रोतों पर थोड़ा अधिक फाइन-ट्यून नियंत्रण रख सकते हैं.
    • उपयोग का उदाहरण:
var options = new WebApplicationOptions
{
    Args = args, // कमांड-लाइन आर्ग्यूमेंट्स पास करें   
    ApplicationName = "MyCustomApp",
    EnvironmentName = "Staging",
    // यदि आप मौजूदा कॉन्फ़िगरेशन प्रदान करना चाहते हैं:   
    Configuration = new ConfigurationBuilder()
        .AddInMemoryCollection(
        new Dictionary<string, string> {
            {
                "MyKey", "MyValue"
            }
        }).Build()
}; 
var builder = WebApplication.CreateBuilder(options);

क्यों "केवल एक या दो" ओवरलोड?

.NET 6 में "मिनिमल API" फिलॉसफी का एक बड़ा हिस्सा यह है कि आपको एप्लीकेशन को बूटस्ट्रैप करने के लिए कम से कम कोड लिखना पड़े। WebApplication.CreateBuilder(args) को डिफ़ॉल्ट रूप से सबसे सामान्य और अच्छी तरह से काम करने वाली सेटिंग्स प्रदान करने के लिए डिज़ाइन किया गया है।

यदि आपको अधिक कस्टम कॉन्फ़िगरेशन की आवश्यकता है, तो आप WebApplicationBuilder इंस्टेंस बनने के बाद उसके गुणों (जैसे builder.Configuration, builder.Services, builder.WebHost) का उपयोग करके उसे आगे कॉन्फ़िगर करते हैं, न कि CreateBuilder() मेथड के ओवरलोड के माध्यम से।

उदाहरण के लिए, यदि आप एक कस्टम लॉगिंग प्रोवाइडर जोड़ना चाहते हैं, तो आप WebApplication.CreateBuilder(args) को कॉल करने के बाद builder.Logging.AddCustomProvider() का उपयोग करते हैं, न कि CreateBuilder() का कोई विशेष ओवरलोड.

यही कारण है कि .NET 6+ में WebApplication.CreateBuilder() के "विभिन्न प्रकार के ओवरलोडेड वर्जन्स" की व्यापकता नहीं है, जैसा कि कुछ अन्य क्लासों में हो सकता है। यह सादगी और डिफ़ॉल्ट कॉन्फ़िगरेशन के माध्यम से सशक्तिकरण पर केंद्रित है।

More than 6 CreateBuilder() मेथड के ओवरलोडिंग

यदि आप डॉक्यूमेंटेशन देखें तो आप पाते हैं कि CreateBuilder(), CreateBuilder(string[] args), CreateBuilder(WebApplicationOptions options) के अलावा इन्हीं से मिलता जुलता तीन और लोडेड मेथड है:

  1. CreateSlimBuilder()
  2. CreateSlimBuilder(string[] args)
  3. CreateSlimBuilder(WebApplicationOptions options)

वस्तुतः .NET 8 (और कुछ हद तक .NET 7) में CreateSlimBuilder() मेथड्स का एक नया सेट पेश किया गया है, जो CreateBuilder() के समकक्ष हैं लेकिन एक अधिक slim या न्यूनतम कॉन्फ़िगरेशन के साथ आते हैं।

तो, अब आपके पास कुल छह सामान्य रूप से उपयोग किए जाने वाले WebApplicationBuilder क्रिएशन मेथड्स हैं:

1. WebApplication.CreateBuilder() मेथड्स

ये वो मेथड्स हैं जिनके बारे में हमने पहले बात की थी। ये एक "पूर्ण" या मानक WebApplicationBuilder बनाते हैं जिसमें Kestrel, appsettings.json, एनवायरनमेंट वेरिएबल्स, कंसोल लॉगिंग और डिपेंडेंसी इंजेक्शन जैसी सभी डिफ़ॉल्ट ASP.NET Core सेटिंग्स शामिल होती हैं। ये अधिकांश सामान्य ASP.NET Core वेब एप्लीकेशन और API के लिए डिफ़ॉल्ट और अनुशंसित विकल्प हैं।

  • CreateBuilder()
    • पैरामीटर: कोई नहीं।
    • उपयोग: यह string[] args के बिना कॉल करने के समान है, जहाँ कमांड-लाइन आर्ग्यूमेंट्स को स्वचालित रूप से नहीं पढ़ा जाता है। यह उन परिदृश्यों में उपयोगी हो सकता है जहाँ आप कमांड-लाइन आर्ग्यूमेंट्स को स्पष्ट रूप से शामिल नहीं करना चाहते हैं।
    • उदाहरण:

var builder = WebApplication.CreateBuilder();

  • CreateBuilder(string[] args)
    • पैरामीटर: args (एक string[] जो कमांड-लाइन आर्ग्यूमेंट्स का प्रतिनिधित्व करता है)।
    • उपयोग: यह सबसे आम है। यह कमांड-लाइन आर्ग्यूमेंट्स को कॉन्फ़िगरेशन सोर्स में शामिल करता है।
    • उदाहरण:

var builder = WebApplication.CreateBuilder(args);

  • CreateBuilder(WebApplicationOptions options)
    • पैरामीटर: options (एक WebApplicationOptions ऑब्जेक्ट)।
    • उपयोग: यह आपको ApplicationName, EnvironmentName, ContentRootPath, WebRootPath, और एक मौजूदा IConfiguration इंस्टेंस जैसे गुणों को सेट करके WebApplicationBuilder के निर्माण के दौरान कुछ अधिक नियंत्रण प्रदान करता है। यह टेस्टिंग या बहुत विशिष्ट प्रारंभिक कॉन्फ़िगरेशन के लिए उपयोगी है।
    • उदाहरण:
var options = new WebApplicationOptions
{
    Args = args,
    EnvironmentName = "Staging"
};
var builder = WebApplication.CreateBuilder(options);

2. WebApplication.CreateSlimBuilder() मेथड्स (नया - .NET 8+)

CreateSlimBuilder() मेथड्स को .NET 8 में पेश किया गया था ताकि उन वर्कलोड के लिए एक अधिक न्यूनतम (minimal) WebApplicationBuilder बनाया जा सके जिन्हें फुल ASP.NET Core डिफ़ॉल्ट की आवश्यकता नहीं होती है। इसका लक्ष्य कुछ स्टार्ट-अप ओवरहेड को कम करना और रिसोर्स के उपयोग को अनुकूलित करना है, खासकर उन परिदृश्यों के लिए जहाँ आप केवल बहुत सरल HTTP API बना रहे हैं या जहाँ आपको प्रत्येक बाइट रिसोर्स की बचत करने की आवश्यकता है (जैसे क्लाउड-नेटिव माइक्रोकॉन्ट्रोलर्स, सर्वरलेस फ़ंक्शंस)।

मुख्य अंतर यह है कि CreateSlimBuilder() डिफ़ॉल्ट रूप से कई "नॉन-एसेंशियल" फीचर्स को शामिल नहीं करता है:

  • कम डिफ़ॉल्ट कॉन्फ़िगरेशन स्रोत: यह केवल एनवायरनमेंट वेरिएबल्स और कमांड-लाइन आर्ग्यूमेंट्स को कॉन्फ़िगरेशन के रूप में जोड़ता है। यह डिफ़ॉल्ट रूप से json फ़ाइलों को लोड नहीं करता है।
  • कम डिफ़ॉल्ट सर्विस रजिस्ट्रेशन: यह कम सर्विसेज़ रजिस्टर करता है, जिसके परिणामस्वरूप एक छोटा डिपेंडेंसी इंजेक्शन कंटेनर होता है।
  • कम डिफ़ॉल्ट लॉगिंग प्रोवाइडर: यह डिफ़ॉल्ट रूप से कंसोल लॉगिंग को सक्षम नहीं करता है (आपको इसे मैन्युअल रूप से जोड़ना होगा यदि आपको इसकी आवश्यकता है)।
  • कोई डिफ़ॉल्ट Kestrel URL नहीं: यह Kestrel के लिए डिफ़ॉल्ट URL (जैसे http://localhost:5000) सेट नहीं करता है। आपको इसे स्पष्ट रूप से या एनवायरनमेंट वेरिएबल्स के माध्यम से कॉन्फ़िगर करना होगा।

यदि आपको इन फीचर्स की आवश्यकता है, तो आपको उन्हें CreateSlimBuilder() के साथ स्पष्ट रूप से जोड़ना होगा।

  • CreateSlimBuilder()
    • पैरामीटर: कोई नहीं।
    • उपयोग: CreateBuilder() के समान, लेकिन बिना कमांड-लाइन आर्ग्यूमेंट्स को कॉन्फ़िगरेशन में शामिल किए।
    • उदाहरण:

var builder = WebApplication.CreateSlimBuilder();

  • CreateSlimBuilder(string[] args)
    • पैरामीटर: args (एक string[] जो कमांड-लाइन आर्ग्यूमेंट्स का प्रतिनिधित्व करता है)।
    • उपयोग: यह स्लिम बिल्डर बनाता है और कमांड-लाइन आर्ग्यूमेंट्स को कॉन्फ़िगरेशन में शामिल करता है।
    • उदाहरण:

var builder = WebApplication.CreateSlimBuilder(args);

  • CreateSlimBuilder(WebApplicationOptions options)
    • पैरामीटर: options (एक WebApplicationOptions ऑब्जेक्ट)।
    • उपयोग: CreateBuilder(WebApplicationOptions options) के समान, लेकिन एक स्लिम बिल्डर कॉन्फ़िगरेशन के साथ।
    • उदाहरण:

var options = new WebApplicationOptions { Args = args };

var builder = WebApplication.CreateSlimBuilder(options);

CreateBuilder() बनाम CreateSlimBuilder(): कब कौन सा उपयोग करें?

  • अधिकांश NET Core एप्लीकेशन (MVC, Razor Pages, फुल-फीचर्ड API): हमेशा WebApplication.CreateBuilder() का उपयोग करें। यह वह है जिसके लिए अधिकांश डॉक्यूमेंटेशन और उदाहरण लिखे गए हैं, और यह आपको एक पूर्ण विशेषताओं वाला वेब एप्लीकेशन बनाने के लिए आवश्यक सभी डिफ़ॉल्ट प्रदान करता है।
  • बहुत सरल HTTP API, माइक्रोकॉन्ट्रोलर्स, सर्वरलेस फ़ंक्शंस, या रिसोर्स-कन्स्ट्रेंड वातावरण: यदि आप हर संभावित बाइट और मिलीसेकंड को बचाने की कोशिश कर रहे हैं, और आपको json या कंसोल लॉगिंग जैसी चीजों की डिफ़ॉल्ट आवश्यकता नहीं है, तो WebApplication.CreateSlimBuilder() एक विकल्प हो सकता है। आपको उन सुविधाओं को मैन्युअल रूप से जोड़ना याद रखना होगा जिनकी आपको स्पष्ट रूप से आवश्यकता है।

टिप्पणियाँ

इस ब्लॉग से लोकप्रिय पोस्ट

Differences between in-process and out-of-process hosting models

Web Fundamental Concepts in Hindi for Beginners - FAQs with their Answers Part-1

Introduction to ASP.NET Core and Web Frameworks